package main
import(
	"fmt"
)
type Point struct{
	x int
	y int
}

// 结构体
type Rect struct{
	leftUp,rightDown Point
}

type Rect2 struct{
	leftUp,rightDown *Point
}

func main(){
	r1 := Rect{Point{1,2},Point{3,4}}

	// r1 有四个 int ,在内存中是连续分布
	fmt.Printf("r1.leftUp.x 地址=%p r1.leftUp.y 地址=%p r1.rightDown.x 地址=%p r1.rightDown.y=%p\n",
		&r1.leftUp.x, &r1.leftUp.y, &r1.rightDown.x, &r1.rightDown.y)


	 // r2 有两个 *Point类型，这两个*Point的本身的地址也是连续的
	 // 但是他们指向的地址不一定是连续
	r2 := Rect2{&Point{10,20},&Point{30,40}}
	//r2.leftUp 地址=0xc00003c240 r2.rightDown 地址=0xc00003c248
	fmt.Printf("r2.leftUp 地址=%p r2.rightDown 地址=%p \n",	&r2.leftUp,&r2.rightDown) 
	// r2.leftUp 指向的地址=0xc0000140a0, r2.rightDown 指向的地址=0xc0000140b0
	fmt.Printf("r2.leftUp 指向的地址=%p, r2.rightDown 指向的地址=%p\n",r2.leftUp,r2.rightDown)





}